package home

import (
	"context"

	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/util/gconv"

	v1 "go_muban/api/home/v1"
	"go_muban/internal/dao"
	"go_muban/internal/model"
	"go_muban/internal/service"
)

// 实现 home 服务接口
type sHome struct{}

// 注册服务实例
func init() {
	service.RegisterService(service.IHome(nil), New())
}

// New 创建服务实例
func New() service.IHome {
	return &sHome{}
}

// GetIndex 获取首页数据
func (s *sHome) GetIndex(ctx context.Context, req *v1.IndexReq) (res *v1.IndexRes, err error) {
	// 获取特色模板
	templatesReq := &v1.FeaturedTemplatesReq{
		Limit: 8, // 默认展示6个特色模板
	}
	featuredTemplates, err := s.GetFeaturedTemplates(ctx, templatesReq)
	if err != nil {
		return nil, err
	}

	// 返回结果
	res = &v1.IndexRes{
		FeaturedTemplates: featuredTemplates,
	}
	return
}

// GetFeaturedTemplates 获取特色模板
func (s *sHome) GetFeaturedTemplates(ctx context.Context, req *v1.FeaturedTemplatesReq) ([]model.MbTemplateItem, error) {
	// 从数据库中查询特色模板
	result, err := dao.MbTemplates.Ctx(ctx).
		OrderDesc("updated").
		Limit(req.Limit).
		All()
	if err != nil {
		return nil, err
	}

	// 转换为模板列表
	templates := make([]model.MbTemplateItem, 0)
	if err = gconv.Scan(result, &templates); err != nil {
		return nil, err
	}

	return templates, nil
}

// GetCategories 获取模板分类
func (s *sHome) GetCategories(ctx context.Context, limit int) (interface{}, error) {
	// 从数据库中查询分类
	result, err := dao.MbCategories.Ctx(ctx).
		Where("is_show", 1).
		OrderDesc("id").
		// Limit(limit).
		All()
	if err != nil {
		return nil, err
	}

	// 转换为分类列表
	categories := g.List{}
	if err = gconv.Scan(result, &categories); err != nil {
		return nil, err
	}

	return categories, nil
}
